/*
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package admin.totalizacion;

import DBMS.DataBaseManager;
import clases.Celda;
import clases.CondicionTotalizacion;
import clases.Matriz;
import clases.Totalizacion;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.actions.DispatchAction;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;

/**
 *
 * @author Jesus Martinez
 */
public class AgregarTotalizacion extends DispatchAction {

    /* forward name="success" path="" */
    private final static String SAVE = "save";
    private final static String MATRIZ = "matriz";
    private final static String SUCCESS = "success";
    private final static String FAILURE = "failure";

    /**
     * This is the Struts action method called on
     * http://.../actionPath?method=myAction1,
     * where "method" is the value specified in <action> element : 
     * ( <action parameter="method" .../> )
     */
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        
        Totalizacion t = (Totalizacion) form;

        System.out.println("TOTALIZACION FORM ");
        DataBaseManager dbm = DataBaseManager.getInstance();
        if (t == null ||
            t.getIdMatriz() == null || t.getCondicion() == null){
                t.setMensaje("No se ha podido agregar la totalizacion.");
                 request.setAttribute("Totalizacion",t);
                return mapping.findForward(FAILURE);
        }
        
        System.out.println("IDMATRIZ " + t.getIdMatriz().toString());
        
        Totalizacion tot = dbm.consultarTotalizacionPorNombre(t.getNombre());
        
        if (tot != null){
            
            t.setMensaje("Ya existe una totalizacion con este nombre. Intente uno distinto");
            request.setAttribute("Totalizacion",t);
            return mapping.findForward(FAILURE);
        }
        
        /*El nombre de la totalizacion sera la concatenacion de las condiciones
         sin los -1, los cuales representan columnas que no seran tomadas en
         cuenta.*/
        ArrayList<CondicionTotalizacion> condicion = t.getCondicion();
       
        Matriz m = new Matriz();
        m.setIdMatriz(t.getIdMatriz());
        m.setTipo(t.getTipoMatriz());
        Matriz mat = dbm.consultarMatriz(m);

        t.setMatriz(mat);
        t.setCondicion(condicion);
        t.filtrar();
        //Totalizacion totalizacion = new Totalizacion(mat,condicion); 
        //totalizacion.setNombre(nombre);
        
        if (t.getCeldasATotalizar().isEmpty()){
            System.out.println("-------------------ESTA VACIO :(");
        }
        
        for (Celda c : t.getCeldasATotalizar()){
            System.out.println("Celda " +c.getNombre() + "dato "+c.getDato().getValor());
        }
       
        
        if(dbm.agregarTotalizacion(t)) {
            t.setMensajeOK("Ha sido agregada la totalizacion de manera satisfactoria.");
            System.out.println("Totalizacion id"+ t.getIdTotalizacion());
            request.setAttribute("Totalizacion", t);
            request.setAttribute("Matriz", mat);
            return mapping.findForward(SUCCESS);
        } else {
            t.setMensaje("No se ha podido agregar la totalizacion.");
            request.setAttribute("Totalizacion", t);
            request.setAttribute("Matriz",mat);
            return mapping.findForward(FAILURE);
        }
        
    }
    
}
